package com.javalab._5often_class;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateTest {

    public static void main(String[] args) {
        //=====================Date==========================
        // 创建时间对象 注意 java.util.Date，非java.sql.Date
        Date date = new Date();

        /**
         * CST(中国标准时间) GMT(格林尼治平均时间) UTC(世界标准时间)
         * UTC = GMT
         * CST = UTC + 8
         */
        // Wed Jun 16 09:34:28 CST 2021
        System.out.println(date.toString());
        // 16 Jun 2021 01:34:28 GMT
        System.out.println(date.toGMTString());

        // 时间戳 1970年01月01日 0:00:00起到具体时间共有多少秒，这个秒数就是Unix时间戳
        long timestamp = date.getTime();
        System.out.println(timestamp);

        Date date2 = new Date(0);
        // Thu Jan 01 08:00:00 CST 1970
        System.out.println(date2.toString());

        Date date3 = new Date(2021,6,16,10,40,1);
        // Sat Jul 16 10:40:01 CST 3921
        System.out.println(date3.toString());



        //====================SimpleDateFormat===========================
        /*输出格式化的日期*/
        SimpleDateFormat sdf = new SimpleDateFormat();
        String format = sdf.format(date);
        // 21-6-16 上午9:43
        System.out.println(format);

        /*指定格式*/
        // 日期格式 yyyy年 MM月(注意大写) dd日 HH小时(大写表示24制,小写标识12制) ss秒 SSS毫秒
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String format2 = sdf2.format(date);
        // 2021-06-16 09:46:40.051
        System.out.println(format2);

        /*字符串转成日期*/
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date parseDate = sdf3.parse("2021-06-16 09:46:40.051");
            System.out.println(parseDate.toString());
        } catch (ParseException e) {
            // 如果parse的日期有误，则会转化失败
            e.printStackTrace();
        }


        //====================Calendar====================================
        // Date不好用，于是jdk8提供了Calendar
        // 使用默认时区和语言环境获得一个日历

        // 创建时间
        Calendar calendar = Calendar.getInstance();
        // 转换成Date
        Date date4 = calendar.getTime();
        // 获取年月日时分秒
        System.out.println("年:" + calendar.get(Calendar.YEAR));
        System.out.println("月:" + (calendar.get(Calendar.MONTH) + 1));// 注意月份下标从0开始，所以取月份要+1
        System.out.println("日:" + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("时:" + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("分:" + calendar.get(Calendar.MINUTE));
        System.out.println("秒:" + calendar.get(Calendar.SECOND));

        // 设置年月日时分秒
        calendar.set(Calendar.YEAR, 2018);
        calendar.set(Calendar.MONTH, Calendar.FEBRUARY);
        calendar.set(Calendar.DAY_OF_MONTH, 15);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        System.out.println(sdf3.format(calendar.getTime()));

        // 加减时间
        // 增加10年
        calendar.add(Calendar.YEAR, 10);
        // 减少1月
        calendar.add(Calendar.MONTH, -1);
        System.out.println(sdf3.format(calendar.getTime()));

        // Date转Calendar
        calendar.setTime(new Date());
    }

}
